AssetBundle序列化尺寸

AssetBundle 加载进内存的序列化文件分析

Asset AssetBundle 序列化分析


Texture

纹理大小不一样
|AssetBundle|TextureSize| AssetBundleSize|SerializedFileSize|
|—|—|—|—|
|texture1|512 512| 176 KB |18.0 KB |
|texture2|1024
1024| 688 KB |18.0 KB |

Shader

以拷贝出来的的 Standard Shader 为标准,分别增加其 Properties 和 SubShader
|AssetBundle|ShaderInfo| AssetBundleSize|SerializedFileSize|
|—|—|—|—|
|shader1|Copy From Standard| 110 KB | 121.6 KB |
|shader2|+ 40 Properties| 113 KB| 121.6 KB |
|shader3|+ 20 SubShader| 519 KB |121.6 KB |

Mesh

顶点数量不同
|AssetBundle| MeshInfo |AssetBundleSize|SerializedFileSize|
|—|—|—|—|
|mesh1| 0 verts 0 tris |9 KB| 23.2 KB |
|mesh2| 30000 verts 10000 tris| 419 KB| 23.2 KB |

Asset 打包进行 AssetBundle 的序列化文件,并不受资源内容尺寸影响,只与资源类型相关


复数资源的打包

AssetBundle Group AssetBundleSize SerializedFileSize
group1 Texture1 + Mesh1 + Shader1 289 KB 129.4 KB
group2 Texture1 + Texture2 + Mesh1 + Mesh2 + Shader1 + Shader2 1461 KB 129.5 KB
  • 同类资源打包, 并不等于单个资源序列化后的文件之和,而是小于,推测有过一些压缩的方案。
  • 重复资源打包,增长量为 0.1KB , 推断同类型资源不会重复创建序列化文件, 增长的 0.1KB 应该是引用相关的数据

Prefab AssetBundle 序列化分析

Prefab 序列化尺寸

空 Prefab
复数空 Prefab 尺寸
|AssetBundle| Info |AssetBundleSize|SerializedFileSize|
|—|—|—|—|
| prefab1| 空的 Gameobject | 5 KB | 18.3 KB |
| prefabgroup | 100 个 空 Gameobject | 30 KB | 23 KB |

100 个 Prefab 打包相比单个 Prefab ,增长量为 1.7 KB , 复数的 Prefab 合并打包不会创建重复的序列化文件

Prefab 复杂化后的尺寸

AssetBundle Info AssetBundleSize SerializedFileSize
prefab1 空的 Gameobject 5 KB 18.3 KB
prefab2 深度创建 1000 个 Child 192 KB 65.2 KB
prefab3 广度创建 1000 个 Child 197 KB 67.0 KB

1000 个 Gameobject 嵌套创建后相比空的 GameObject ,增长量为 46.9 KB ,广度嵌套相比增长再多 1.8 KB 。 对比上一个空 prefab 的测试, 100 个 prefab 增长约 5KB , 这里 1000 个 child 对应增长 46.9 KB 。Prefab 的复杂度增加也会增大序列化文件的尺寸

MonoScript AssetBundle 序列化尺寸

AssetBundle Info AssetBundleSize SerializedFileSize
mono1 干净的 MonoScript 6 KB 20.1 KB
mono2 + 10 Vector3[] 序列化字段 7 KB 20.8 KB
mono3 每个序列化字段填入100个 vector3 19 KB 20.8 KB

脚本的序列化只与序列化字段的的数量有关,字段内容并不被提前序列化后加载

AssetBundle 中依赖关系的序列化分析

AssetBundle Info AssetBundleSize SerializedFileSize
reference1 GameObject + Mono 6 KB 20.2 KB
reference2 GameObject + Mono + Texture 178 KB 21.6 KB
reference3 GameObject + Mono -> Texture 178 KB 21.6 KB
reference4 GameObject + Mono -> Texture(texture1) 6 KB 92.3 KB
reference4 GameObject + Mono -> Texture1(texture1) Texture2(texture2) 6 KB 92.4 KB
  • 包内依赖与包内引用没有大小的变化,推断引用关系不会被序列化或者是量级太小无法感知
  • 包之间的引用产生了一个 70.7 KB 的变化,这个变化不会随着包的引用数量而增加,查资料发现是有一个extern reference 的 buff 区域创建。